home *** CD-ROM | disk | FTP | other *** search
/ ASME's Mechanical Engine…ing Toolkit 1997 December / ASME's Mechanical Engineering Toolkit 1997 December.iso / c_lang / weekday.c < prev    next >
Text File  |  1989-05-10  |  2KB  |  71 lines

  1. /*----------------------------------------------------------------------
  2.  *+
  3.  *  Compute_Day
  4.  *  Compute Day of Week
  5.  *
  6.  *  Usage
  7.  *
  8.  *      int
  9.  *      Compute_Day(date, month, year)
  10.  *      int     date ;
  11.  *      int     month ;
  12.  *      int     year ;
  13.  *
  14.  *  Parameters
  15.  *
  16.  *      date            Date of Month (1 - 31)
  17.  *      month           Month of Year (1 - 12)
  18.  *      year            Year (e.g., 1989)
  19.  *
  20.  *  Description
  21.  *
  22.  *      Compute_Day() computes the day of the week for the given date
  23.  *      using the Zeller Congruence.  It returns a positive value from
  24.  *      0 to 6 for the day of the week
  25.  *
  26.  *  Notes
  27.  *
  28.  *      The Zeller Congruence maps Saturday as day 0.  Most applications
  29.  *      treat Sunday as day 0.  The parameter ZELLER_OFFSET is used to
  30.  *      convert the day of the week from Zeller to local.
  31.  *
  32.  *-
  33.  */
  34.  
  35. int
  36. Compute_Day(date, month, year)
  37. int     date ;
  38. int     month ;
  39. int     year ;
  40.  
  41. {
  42. int     day ;
  43. int     yr ;
  44. int     mn ;
  45. int     n1 ;
  46. int     n2 ;
  47.  
  48. /* Offset from Zeller to local */
  49. /* --------------------------- */
  50. #define ZELLER_OFFSET   -1
  51.  
  52. yr = year ;
  53. mn = month ;
  54.  
  55. /* January or February? */
  56. /* -------------------- */
  57. if (mn < 3)
  58.         {
  59.         /* Yes, make these part of last year */
  60.         /* --------------------------------- */
  61.         mn += 12 ;
  62.         yr -= 1 ;
  63.         }
  64.  
  65. n1 = (26 * (mn + 1)) / 10 ;
  66. n2 = (int) ((125 * (long) yr) / 100) ;
  67.  
  68. day = ((date + n1 + n2 - (yr / 100) + (yr / 400) + ZELLER_OFFSET) % 7) ;
  69. return day ;
  70. }
  71.